/*
 * @Descripttion: 
 * @Author: jiansheng
 * @Date: 2021-12-03 09:27:27
 */
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
export default {
  install(Vue) {
    Vue.prototype.getPdf = function () {
      var title = this.htmlTitle;
      window.pageYoffset = 0;
      document.documentElement.scrollTop = 0;
      document.body.scrollTop = 0;
      setTimeout(() => {
        html2Canvas(document.querySelector('#pdfDom'), {
          background: '#FFFFFF',
          useCORS: true,
          logging: false,
          tainttest: true,
          allowTaint: true,
          letterRendering: true,
        }).then(function (canvas) {
          let contentWidth = canvas.width;
          let contentHeight = canvas.height;
          
           //返回图片dataURL，参数：图片格式和清晰度(0-1)
          let pageData = canvas.toDataURL('image/jpeg', 1.0)
          //页面偏移
          let position = 0
          //a4纸的尺寸[595.28,841.89]，html页面生成的canvas在pdf中图片的宽高
          let imgWidth = 595.28
          let imgHeight = (592.28 / contentWidth) * contentHeight;//根据宽度和宽高比，计算高度        
          // 三个参数，第一个方向默认纵向p,横向用l表示，第二个单位，第三个尺寸格式：默认a4,也可用[274,292]来自定义大小
          let PDF = new JsPDF('p', 'pt', 'a4')
          //有两个高度需要区分，一个是html页面的实际高度，和生成pdf的页面高度(841.89)
          //一页pdf中显示html页面生成的canvas高度,超过这个高度的内容放入下一页
          let pageHeight = (contentWidth / 592.28) * 841.89;
          //未生成pdf的html页面高度
          let endHeight = contentHeight;

          //当内容未超过pdf一页显示的范围，无需分页
          if (endHeight < pageHeight) {
            PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)
          } else {
            while (endHeight > 0) {
              PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
              endHeight -= pageHeight
              position -= 841.89
              if (endHeight > 0) {
                PDF.addPage()
              }
            }
          }
          PDF.save(title + '.pdf')
        })
      }, 500)
    }
  }
}
